package br.com.base.negocios.controladores.imp;

import java.io.Serializable;
import java.util.List;

import br.com.base.negocios.controladores.IControlador;
import br.com.base.negocios.entidades.Entidade;
import br.com.base.repositorio.DAO.IGenericDAO;
import br.com.base.repositorio.filtro.IFiltro;

public abstract class ControladorGeneric<ENTIDADE extends Entidade, ID extends Serializable, FILTRO extends IFiltro<ENTIDADE>>
		implements IControlador<ENTIDADE, ID, FILTRO> {

	private IGenericDAO<ENTIDADE, ID, FILTRO> entidadeDAO;

	@SuppressWarnings("unchecked")
	public ControladorGeneric(IGenericDAO entidadeDAO) {
		this.entidadeDAO = entidadeDAO;
	}

	public ENTIDADE buscar(ID id) {
		return null;
	}

	public void editar(ENTIDADE obj) {
		// TODO Implementar ControladorGeneric -> listar
	}

	public List<ENTIDADE> filtrar(FILTRO filtro) {
		// TODO Implementar ControladorGeneric -> listar
		return null;
	}

	public IGenericDAO<ENTIDADE, ID, FILTRO> getEntidadeDAO() {
		return entidadeDAO;
	}

	public void inserir(ENTIDADE obj) {
		this.validarInclusao(obj);
		this.entidadeDAO.inserir(obj);
	}

	public List<ENTIDADE> listar() {
		// TODO Implementar ControladorGeneric -> listar
		return null;
	}

	public void remover(ENTIDADE obj) {
		// TODO Implementar ControladorGeneric -> listar
	}

	public void setEntidadeDAO(IGenericDAO<ENTIDADE, ID, FILTRO> entidadeDAO) {
		this.entidadeDAO = entidadeDAO;
	}

	public abstract void validarExclusao(ENTIDADE entidade);

	public abstract void validarInclusao(ENTIDADE entidade);

}
